package org.spring.aop;

import com.sun.istack.internal.Nullable;

import java.lang.reflect.Method;

/**
 * 返回通知后，只在正常方法返回时调用，而不是在抛出异常时调用。
 * 这样的通知可以看到返回值，但不能更改它。
 *
 * @author 李坤
 * @date 2022/4/19 16:24
 */
public interface AfterReturningAdvice extends AfterAdvice {

    /**
     * 在给定方法成功返回后回调。
     *
     * @param target      方法调用的目标。可能是{@code null}。
     * @param returnValue 方法返回的值(如果有的话)
     * @param method      被调用的方法
     * @param args        方法的参数
     *
     * @throws Throwable 如果此对象希望终止调用。
     *                   如果方法签名允许，抛出的任何异常都将返回给调用者。
     *                   否则，异常将被包装为运行时异常。
     */
    void afterReturning(@Nullable Object target, @Nullable Object returnValue, Method method, Object[] args) throws Throwable;

}
